import { createI18n } from 'vue-i18n'
// 导入 element-plus 的中文语言包
import zhCn from 'element-plus/es/locale/lang/zh-cn'
// 导入 element-plus 的英文语言包
import enUs from 'element-plus/es/locale/lang/en'
// 定义中文对象，通过 import.meta.glob 加载 './zh-cn/*.ts' 文件
const zhLangFiles: Record<string, { default: any }> = import.meta.glob('./zh-cn/*.ts', { eager: true })
// 创建中文自定义语言包
const zhCnLang: Record<string, any> = {}
// 遍历加载的中文文件对象
for (const path in zhLangFiles) {
    // 通过正则表达式从文件路径中提取模块名称
    const moduleName = path.replace(/^\.\/zh-cn\/(.*)\.\w+$/, '$1');
    // 获取文件的默认导出内容
    const value = zhLangFiles[path].default;
    // 将提取的模块内容存储在 zhCnLang 对象中
    zhCnLang[moduleName] = value;
}
// 定义英文对象，通过 import.meta.glob 加载 './en-us/*.ts' 文件
const enLangFiles: Record<string, { default: any }> = import.meta.glob('./en-us/*.ts', { eager: true })
// 创建英文自定义语言包
const enUsLang: Record<string, any> = {}
// 遍历加载的中文文件对象
for (const path in enLangFiles) {
    // 通过正则表达式从文件路径中提取模块名称
    const moduleName = path.replace(/^\.\/en-us\/(.*)\.\w+$/, '$1');
    // 获取文件的默认导出内容
    const value = enLangFiles[path].default;
    // 将提取的模块内容存储在 enUsLang 对象中
    enUsLang[moduleName] = value;
}
// 动态加载插件的中文语言包文件
const addonZhLangFiles: Record<string, { default: any }> = import.meta.glob('@/addons/**/lang/zh-cn/*.ts', { eager: true });
// 动态加载插件的英文语言包文件
const addonEnLangFiles: Record<string, { default: any }> = import.meta.glob('@/addons/**/lang/en-us/*.ts', { eager: true });
// 遍历插件的中文语言包文件，将其内容合并到 zhCnLang 对象中
for (const key in addonZhLangFiles) {
    const match = key.match(/addons\/(\w+)\/lang\/zh-cn\/(\w+)\.\w+/);
    if (match) {
        const pluginName = match[1];
        const fileName = match[2];
        const moduleContent = addonZhLangFiles[key].default;
        const moduleName = { [pluginName]: { [fileName]: moduleContent } };
        Object.assign(zhCnLang, moduleName);
    }
}
// 遍历插件的英文语言包文件，将其内容合并到 enUsLang 对象中
for (const key in addonEnLangFiles) {
    const match = key.match(/addons\/(\w+)\/lang\/en-us\/(\w+)\.\w+/);
    if (match) {
        const pluginName = match[1];
        const fileName = match[2];
        const moduleContent = addonEnLangFiles[key].default;
        const moduleName = { [pluginName]: { [fileName]: moduleContent } };
        Object.assign(enUsLang, moduleName);
    }
}
// 创建语言消息对象
const messages = {
    'zh-cn': {
        el: zhCn,
        ...zhCnLang
    },
    'en-us': {
        el: enUs,
        ...enUsLang
    }
}
// 创建 i18n 实例进行多语言配置
const i18n = createI18n({
    locale: tool.data.get('APP_LANG') || 'zh-cn',
    fallbackLocale: 'zh-cn',
    globalInjection: true,
    messages,
})

// 导出创建的 i18n 实例，供其他模块使用
export default i18n;